/**
* @auther Yuxin Ma
* @module models/ego-query-model
* @exports EgoQueryModel
*/
'use strict';
var $ = require('jquery');
var _ = require('underscore');
var Backbone = require('backbone');
Backbone.$ = $;
//require('backbone-relational');
var Node = require('./node-model');
var NodeCollection = require('../collections/node-collection');
var Filter = require('./query-filter');
var FilterCollection = require('../collections/filter-collection');
var Graph = require('./graph-model');
var EgoQueryModel = Backbone.Model.extend( /** @lends models/EgoQueryModel.prototype */ {
/**
* Ego网络的查询。
* @augments Backbone.Model
* @constructs
*/
urlRoot: 'query/ego',
defaults: {
/**
* 查询层数,默认为3。
* @type {number}
*/
layer: 3,
/**
* 根节点id的数组。一般在查询Ego网络时只需要填充1个元素。
* @type {number[]}
*/
vertexIds: [],
edgeCondition: 'and',
/**
* 边的过滤器
* @type {Filter}
*/
edgeFilters: new FilterCollection(),
vertexCondition: 'and',
/**
* 节点的过滤器
* @type {Filter}
*/
vertexFilters: new FilterCollection(),
edgeLabels: [],
vertexLabels: [],
direction: 'both'
},
///***************************************************************************************************
// * 测试用,用于匹配Graph(EGO_DEMO)的纯前端demo数据。
// * TODO: 完成后端后删除
// ***************************************************************************************************/
//save: function(data, options) {
// // 创建EGO_DEMO Graph
// var g = new Graph({DEBUG_EGO_FRONTEND: true, diameter: 1000}, {parse: true})
//
// this.set('graph', new Graph());
//},
//validate: function(attrs, options) {
// // TODO: 此处仅适用于2015.12.13的demo数据,后端可灵活变化后删除。
// if (attrs['demoMagicNum'] === undefined) {
// return '2015.12.13 Currently the demoMagicNum is necessary.';
// }
//},
/**
* 添加节点
* @param {(number|Node)} v - 节点id或Node
*/
addVertex: function(v) {
if (v instanceof Node) {
v = v.id;
}
if (this.get('vertexIds').indexOf(v) == -1) {
this.get('vertexIds').push(v);
}
},
/**
* 删除节点
* @param {(number|Node)} v - 节点id或Node
*/
removeVertex: function(v) {
if (v instanceof Node) {
v = v.get('id');
}
var vertices = this.get('vertexIds');
var index = vertices.indexOf(v);
if (index > -1) {
vertices.splice(index, 1);
}
},
/**
* 添加边的过滤条件
* @param {Filter} edgeFilter - 过滤器
*/
addEdgeFilter: function(edgeFilter) {
this.get('edgeFilters').add(edgeFilter);
},
/**
* 添加节点的过滤条件
* @param {Filter} vertexFilter - 过滤器
*/
addVertexFilter: function(vertexFilter) {
this.get('vertexFilters').add(vertexFilter);
},
/**
* 来自https://github.com/jashkenas/backbone/issues/483的最后一段,解决嵌套Model和Collection的toJSON问题。
* @returns {*}
*/
toJSON: function() {
if (this._isSerializing) {
return this.id || this.cid;
}
this._isSerializing = true;
var json = _.clone(this.attributes);
_.each(json, function(value, name) {
_.isFunction((value || "").toJSON) && (json[name] = value.toJSON());
});
this._isSerializing = false;
return json;
},
/**
* 重载Backbone.Model.parse。
* @param {*} response
* @param {*} options
* @returns {{}}
*/
parse: function(response, options) {
console.log(response);
console.log(options);
//return {test: 'ok'};
}
});
module.exports = EgoQueryModel;